package com.aos.service.user;

import com.aos.dto.parameters.SynchroUserParameter;
import com.aos.dto.parameters.UserParameter;
import com.aos.dto.parameters.UserRegisterParameter;
import com.aos.util.Result;

import java.util.Map;

/**
 * @ClassName UserService
 * @Description:TODO
 * @Author wumingwang
 * @Date 2018/9/7 16:09
 * @Version 1.0
 */
public interface UserService {

    /**
     * 用户分页查询
     * @param map
     * @return
     */
    Result queryByPage(Map<String,Object> map);

    /**
     * 新增用户
     * @param user
     * @return
     */
    Result addUser(UserParameter user);

    /**
     * 根据ID删除用户
     * @param id
     * @return
     */
    Result deleteById(Long id);

    /**
     * 编辑用户
     * @param user
     * @return
     */
    Result updateUser(UserParameter user);

    /**
     * 查询用户详情
     * @param id
     * @return
     */
    Result queryDetails(Long id);

    /**
     * 冻结/解冻用户
     * @param userId
     * @param state
     * @return
     */
    Result frozenThawing(Long userId,String state);

    /**
     * 根据应用ID和用户ID获取该用户所有权限
     * @param map
     * @return
     */
    Result getPermissionsByAppAndUser(Map<String,Object> map);

    /**
     * 用户登录校验
     * @param userName
     * @param password
     * @param appCode
     * @return
     */
    Result userLogin(String userName, String password, String appCode);

    /**
     * 用户登录成功后的操作
     * @param result
     * @param accessToken
     * @return
     */
    Result operationUser(Result result, String accessToken);

    /**
     * 用户登出
     * @return
     */
    Result logout();

    /**
     * 用户注册
     * @return
     */
    Result registerUser(UserRegisterParameter user);

    /**
     * 用户鉴权
     * @param token
     * @param permission
     * @param appCode
     * @return
     */
    Result authentication(String token, String permission,String appCode);

    /**
     * 根据token获取当前登录用户
     * @param token
     * @return
     */
    Result getCurrentUser(String token);

    /**
     * 更新用户状态
     * @param id
     * @param state
     * @return
     */
    Result updateState(Long id,String state);

    /***
     * 同步用户数据
     * @param user
     * @return
     */
    Result synchroUser(SynchroUserParameter user);
}
